Dans ce notebook, nous allons essayer de faire du text mining pour récuper des versions locales des programmes des présidentielles 2017 des candidats suivants :

  • François Fillon (apparemment, le projet sort le 13 mars seulement)
  • Marine Le Pen
  • Benoît Hamon
  • Jean-Luc Mélenchon
  • Emmanuel Macron

Différentes manières de récupérer les programmes sont possibles : soit à partir des fichiers .pdf, soit à partir des sites des campagnes. Nous allons faire au plus simple, à l'aide des sites de campagnes.


In [1]:
from bs4 import BeautifulSoup
import requests
import re
import pandas as pd
from ipywidgets import interact

In [2]:
def make_df_from_props_sources(props_sources):
    "Makes a big dataframe from props_sources."
    dfs = []
    for key in props_sources:
        df = pd.DataFrame(props_sources[key], columns=['proposition'])
        df['source'] = key
        dfs.append(df)
    df = pd.concat(dfs).reset_index(drop=True)
    return df

François Fillon

Le projet de François Fillon ne sera annoncé que le 13 mars : https://www.fillon2017.fr/projet/


In [129]:
r = requests.get('https://www.fillon2017.fr/projet/')
soup = BeautifulSoup(r.text, 'html.parser')

In [130]:
tags = soup.find_all('a', class_='projectItem__inner')

In [131]:
sublinks = [tag.attrs['href'] for tag in tags]

In [132]:
r = requests.get('https://www.fillon2017.fr/projet/competitivite/')
soup = BeautifulSoup(r.text, 'html.parser')

In [133]:
tags = soup.find_all('li', class_='singleProject__propositionItem')

In [134]:
len(tags)


Out[134]:
5

In [135]:
tag = tags[0]

In [136]:
tag.find('div', class_='singleProject__propositionItem-content').text


Out[136]:
'Renforcer les allègements existants par un nouvel allègement de charges sociales et d’impôts de production, de 25 Mds€, portant sur tous les salaires, pour redonner un nouveau souffle à l’économie française. Cet allègement montera progressivement en charge jusqu’en 2020. '

In [137]:
for tag in tags:
    tag.find('div', class_='singleProject__propositionItem-content').text

In [138]:
def extract_propositions(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    tags = soup.find_all('li', class_='singleProject__propositionItem')
    return [tag.find('div', class_='singleProject__propositionItem-content').text for tag in tags]

In [139]:
extract_propositions(sublinks[0])


Out[139]:
['Renforcer les allègements existants par un nouvel allègement de charges sociales et d’impôts de production, de 25 Mds€, portant sur tous les salaires, pour redonner un nouveau souffle à l’économie française. Cet allègement montera progressivement en charge jusqu’en 2020. ',
 'Transformer le CICE qui est un crédit d’impôt complexe, en baisse des charges patronales pour un montant équivalent, durable et lisible.',
 "Alléger l’impôt sur les sociétés (IS) pour renforcer la compétitivité de nos entreprises et la création d’emplois en France. Les contributions additionnelles à l’IS seront supprimées en 2018 et le taux d'IS sera diminué progressivement pour atteindre environ 25% au terme du quinquennat. Cette mesure représente un effort de l’ordre de 10 Mds€ et permettra de tendre vers le taux moyen de l’Union européenne.  \n",
 'Prolonger jusqu’en 2019 le dispositif de suramortissement exceptionnel des investissements, pour soutenir l’investissement et la trésorerie des entreprises industrielles. \n',
 'Stabiliser et rendre lisible notre politique fiscale pendant cinq ans, après avoir annoncé les grandes mesures fiscales du quinquennat, pour donner de la lisibilité aux acteurs économiques.']

In [140]:
props_sources = {}
for sublink in sublinks:
    props = extract_propositions(sublink)
    props_sources[sublink] = props

In [141]:
df = make_df_from_props_sources(props_sources)
df.head()


Out[141]:
proposition source
0 Supprimer l’encadrement des loyers et créer un... https://www.fillon2017.fr/projet/logement/
1 Rééquilibrer les relations entre les bailleurs... https://www.fillon2017.fr/projet/logement/
2 Alléger les contraintes pesant sur l'investiss... https://www.fillon2017.fr/projet/logement/
3 Développer des logements intermédiaires en zon... https://www.fillon2017.fr/projet/logement/
4 Etablir les règles de la fiscalité sur le loge... https://www.fillon2017.fr/projet/logement/

In [142]:
df.to_csv('../projets/francois_fillon.csv', index=False, quoting=1)

Marine Le Pen

Les 144 engagements de Marine Le Pen peuvent être consultés ici : https://www.marine2017.fr/programme/

 Analyse de la structure du site

Apparemment, les différentes propositions sont imbriquées dans des balises <p>.

<p>3. <strong>Permettre la représentation de tous les Français</strong> par le scrutin proportionnel à toutes les élections. À l’Assemblée nationale, la proportionnelle sera intégrale avec une prime majoritaire de 30 % des sièges pour la liste arrivée en tête et un seuil de 5 % des suffrages pour obtenir des élus.</p>

On peut donc extraire ces éléments et les trier ensuite.

Extraction des paragraphes

Téléchargeons le code source de la page.


In [16]:
r = requests.get('https://www.marine2017.fr/programme/')

In [17]:
soup = BeautifulSoup(r.text, "html.parser")

Maintenant, chercons à extraire tous les paragraphes, à l'aide d'une fonction qui vérifie que le paragraphe commence par un nombre suivi d'un point (et peut-être d'un espace).


In [18]:
pattern = re.compile('^\d+.\s*')

In [19]:
def filter_func(tag):    
    if tag.text is not None:
        return pattern.match(tag.text) is not None
    else:
        return False

In [20]:
all_paragraphs = [re.split(pattern, tag.text)[1:] for tag in soup.find_all('p') if filter_func(tag)]

In [21]:
len(all_paragraphs)


Out[21]:
144

In [22]:
@interact
def disp_para(n=(0, len(all_paragraphs) - 1)):
    print(all_paragraphs[n])



In [23]:
props_sources = {}
props_sources['https://www.marine2017.fr/programme/'] = all_paragraphs

In [24]:
df = make_df_from_props_sources(props_sources)

In [25]:
df.head(10)


Out[25]:
proposition source
0 Retrouver notre liberté et la maîtrise de notr... https://www.marine2017.fr/programme/
1 Organiser un référendum en vue de réviser la C... https://www.marine2017.fr/programme/
2 Permettre la représentation de tous les França... https://www.marine2017.fr/programme/
3 Abaisser le nombre de députés à 300 (contre 57... https://www.marine2017.fr/programme/
4 Créer un véritable référendum d’initiative pop... https://www.marine2017.fr/programme/
5 Conserver trois niveaux d’administration (au l... https://www.marine2017.fr/programme/
6 Garantir la liberté d’expression et les libert... https://www.marine2017.fr/programme/
7 Créer une charte à valeur constitutionnelle qu... https://www.marine2017.fr/programme/
8 Défendre les droits des femmes : lutter contre... https://www.marine2017.fr/programme/
9 Assurer le respect de la liberté d’association... https://www.marine2017.fr/programme/

Bien, on peut maintenant écrire ces données dans un fichier texte.


In [26]:
df.to_csv('../projets/marine_le_pen.csv', index=False, quoting=1)

Benoît Hamon

Le site de Benoît Hamon ne permet pas d'accéder à une page avec toutes les propositions facilement. Du coup, il faut explorer trois sous-catégories.


In [27]:
r = requests.get('https://www.benoithamon2017.fr/thematique/pour-un-progres-social-et-ecologique/')
r


Out[27]:
<Response [200]>

In [28]:
soup = BeautifulSoup(r.text, 'html.parser')

In [29]:
all_propositions = soup.find_all(class_='Propositions-Proposition')

In [30]:
len(all_propositions)


Out[30]:
66

In [31]:
p = all_propositions[0]

In [32]:
p.text


Out[32]:
'\nLutte contre les déserts médicaux\nJe lutterai contre les déserts médicaux en retirant le conventionnement aux médecins qui s’installent en zone surdotée. Cette mesure n’entrave en rien la liberté d’installation du médecin, qui peut toujours choisir de s’y installer\xa0: il ne bénéficiera simplement plus du conventionnement. J’encouragerai le développement de maisons de santé pluridisciplinaires rassemblant des médecins libéraux, appuyés pour les tâches administratives par un gestionnaire des fonctions support. \n\n\nJe soutiens, je partage sur les réseaux #DésertsMédicaux\n\n\n\nEn savoir plus\n'

In [33]:
p.find('h1').text


Out[33]:
'Lutte contre les déserts médicaux'

In [34]:
p.find('p').text


Out[34]:
'Je lutterai contre les déserts médicaux en retirant le conventionnement aux médecins qui s’installent en zone surdotée. Cette mesure n’entrave en rien la liberté d’installation du médecin, qui peut toujours choisir de s’y installer\xa0: il ne bénéficiera simplement plus du conventionnement. J’encouragerai le développement de maisons de santé pluridisciplinaires rassemblant des médecins libéraux, appuyés pour les tâches administratives par un gestionnaire des fonctions support.'

On peut extraire de ces propositions la moëlle essentielle :


In [35]:
def extract_data(tag):
    "Extracts title for tag and content."
    subject = tag.find('h1').text
    content = tag.find('p').text
    return subject, content

Construisons une table de données avec ces propositions.


In [36]:
df = pd.DataFrame([extract_data(p) for p in all_propositions], columns=['titre', 'contenu'])

In [37]:
df


Out[37]:
titre contenu
0 Lutte contre les déserts médicaux Je lutterai contre les déserts médicaux en ret...
1 Abrogation de la loi Travail J’abrogerai immédiatement la loi Travail. Je r...
2 Un budget de 1% du PIB dédié à la culture Je porterai le budget consacré au développemen...
3 Création d’un Revenu universel d’existence Je mettrai en place un revenu universel d’exis...
4 Mise en place d’un statut social unique de l’a... Je créerai un statut unique pour tous les acti...
5 Oui au travail indépendant, non à l’ubérisatio... Je lutterai contre le salariat déguisé des ent...
6 Plan d’investissements dans la rénovation éner... Je lancerai un plan massif d’investissements d...
7 Annulation de la dette contractée par les pays... J’organiserai avec nos partenaires européens l...
8 Création d’une taxe sur les robots Je créerai une taxe sur la richesse créée par ...
9 Reconnaissance d’un statut de l’artiste Je donnerai corps à un statut de l’artiste afi...
10 Plus de pluralisme dans la recherche et l’ense... Je soutiendrai la création d’une nouvelle sect...
11 Sanctuarisation des biens communs (air, eau, s... Je sanctuariserai les biens communs en inscriv...
12 Stop aux pesticides et aux perturbateurs endoc... J’interdirai immédiatement les pesticides dang...
13 Grande conférence Ecologie-Prévention-Santé Je lancerai une grande conférence nationale Ec...
14 Défense de nos intérêts face au libéralisme éc... Je suspendrai immédiatement l’application de l...
15 Une véritable convergence sociale européenne Je proposerai un processus de convergence soci...
16 Mesures immédiates de soutien au pouvoir d’achat Je revaloriserai immédiatement les minima soci...
17 Une nouvelle étape dans le partage du temps de... Je propose d’organiser la baisse du temps de t...
18 Un visa humanitaire pour une protection tempor... Je créerai un visa humanitaire. Il ouvrira aux...
19 Droit de mourir dans la dignité Je créerai le droit à une aide médicale pour m...
20 Objectif de 50% d’énergies renouvelables dès 2025 Je créerai une aide pour permettre aux citoyen...
21 13 agences régionales pour un développement te... Je créerai dans chacune des grandes régions un...
22 Une plus grande attention à la situation socia... J’accorderai toute l’attention qu’elle mérite ...
23 Reconnaissance du burnout comme maladie profes... Je ferai reconnaître le syndrome d’épuisement ...
24 Plus de centres d’accueil du planning familial Je rouvrirai des centres d’accueil du Planning...
25 Renforcement de la lutte contre l’évasion fiscale Je mettrai en place un reporting public pays p...
26 Facilitation de la reprise en SCOP par les sal... Je faciliterai la reprise d’entreprises par le...
27 Sortie du diesel à l’horizon 2025 Je ferai sortir la France du diesel à l’horizo...
28 Réduction du coût du capital et des dividendes En France, le partage des bénéfices se fait tr...
29 Un programme d’investissements pour développer... Je lancerai un programme d’investissements agr...
... ... ...
36 Du temps et des moyens pour chacun de s’engager Je développerai les modalités de partage du te...
37 Renforcement de la loi SRU sur le logement social Je renforcerai les sanctions à l’encontre des ...
38 Une réforme fiscale pour rétablir justice et é... Je mènerai une véritable révolution fiscale. J...
39 Une aide au développement à la hauteur de nos ... Je rétablirai l’aide au développement à la hau...
40 Elimination des obstacles à l’intégration des ... Je lèverai les obstacles actuels à l’intégrati...
41 Equité des aides à l’accès aux complémentaires... Je porterai un droit à la santé universel, ind...
42 Grande conférence contre l’exclusion Dès 2017, j’ouvrirai une grande conférence des...
43 Modification des règles de Dublin sur le droit... Je mettrai fin aux règles absurdes de Dublin q...
44 Moratoire sur le Pacte de stabilité Je forgerai une alliance interétatique, politi...
45 Un Acte II de l’Economie Sociale et Solidaire Je lancerai un acte II de l’économie sociale e...
46 Un Etat stratège pour la révolution énergétique Je redonnerai une vision stratégique à l’Etat ...
47 Légalisation du cannabis et prévention Je légaliserai le cannabis et j’encadrerai sa ...
48 Prévention contre l’alcool et le tabac Je mettrai l’accent sur la prévention pour réd...
49 Reconnaissance de l’engagement des jeunes J’assurerai à tous les jeunes une véritable re...
50 Création d’un service public de la petite enfance Je souhaite que les jeunes parents, et notamme...
51 Grand plan national Sport et Santé Je propose le remboursement par la Sécurité So...
52 Responsabilité des dirigeants d’entreprises Je créerai un statut des dirigeant.e.s de gran...
53 Reconnaissance du droit à la déconnexion pour ... Je reconnaîtrai le droit à la déconnexion effe...
54 Un impôt unique sur le patrimoine net des dettes Je créerai un impôt unique sur le patrimoine, ...
55 Garantie d’un meilleur accès aux données publi... Je mènerai une politique d’open data et de tra...
56 Contrôle parlementaire des nominations préside... Je développerai le contrôle parlementaire sur ...
57 Respect de l’égalité salariale femmes-hommes Je renforcerai les sanctions inscrites dans la...
58 Une PAC verte pour accompagner la transition a... Je négocierai au niveau européen pour qu’une p...
59 Priorité de l’attribution du foncier agricole ... Je modifierai les critères de l’examen des dos...
60 L’autonomie alimentaire grâce aux circuits courts Je favoriserai le développement de cultures ma...
61 Lancement d’un plan contre la maltraitance ani... Je garantirai le respect des plus hautes exige...
62 Vers une harmonisation fiscale en Europe Je ferai de l’harmonisation fiscale dans l’Uni...
63 Pour un syndicalisme renforcé Je renforcerai l’implication des syndicats dan...
64 Sortie du budget de la défense des règles euro... J’exclurai le budget de la défense du calcul d...
65 L’Université au coeur de la méritocratie répub... Je remettrai l’enseignement supérieur au coeur...

66 rows × 2 columns


In [38]:
df[df['contenu'].str.contains('ascension')]


Out[38]:
titre contenu
65 L’Université au coeur de la méritocratie répub... Je remettrai l’enseignement supérieur au coeur...

On peut transformer ces propositions en DataFrame.


In [39]:
props_sources = {}
props_sources['https://www.benoithamon2017.fr/thematique/pour-un-progres-social-et-ecologique/'] = df['contenu'].values.tolist()

In [40]:
df = make_df_from_props_sources(props_sources)

In [41]:
df.head()


Out[41]:
proposition source
0 Je lutterai contre les déserts médicaux en ret... https://www.benoithamon2017.fr/thematique/pour...
1 J’abrogerai immédiatement la loi Travail. Je r... https://www.benoithamon2017.fr/thematique/pour...
2 Je porterai le budget consacré au développemen... https://www.benoithamon2017.fr/thematique/pour...
3 Je mettrai en place un revenu universel d’exis... https://www.benoithamon2017.fr/thematique/pour...
4 Je créerai un statut unique pour tous les acti... https://www.benoithamon2017.fr/thematique/pour...

In [42]:
df.to_csv('../projets/benoit_hamon.csv', index=False, quoting=1)

Jean-Luc Mélenchon

On peut trouver une version inofficielle du programme ici : https://laec.fr/sommaire

Un peu comme pour le site d'Hamon, il y a des rubriques. Commençons par la première.


In [43]:
r = requests.get('https://laec.fr/chapitre/1/la-6e-republique')

In [44]:
soup = BeautifulSoup(r.text, 'html.parser')

In [45]:
sublinks = soup.find_all('a', class_='list-group-item')

In [46]:
sublinks


Out[46]:
[<a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/1/reunir-une-assemblee-constituante"><span class="label label-default">1</span> Réunir une Assemblée constituante </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/2/balayer-l-oligarchie-abolir-les-privileges-de-la-caste"><span class="label label-default">2</span> Balayer l'oligarchie, abolir les privilèges de la caste </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/3/une-republique-permettant-l-intervention-populaire"><span class="label label-default">3</span> Une République permettant l'intervention populaire </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/4/abolir-la-monarchie-presidentielle"><span class="label label-default">4</span> Abolir la monarchie présidentielle </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/5/une-nouvelle-etape-des-libertes-et-de-l-emancipation-personnelles"><span class="label label-default">5</span> Une nouvelle étape des libertés et de l'émancipation personnelles </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/6/une-republique-universelle"><span class="label label-default">6</span> Une République universelle </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/7/une-republique-laique"><span class="label label-default">7</span> Une République laïque </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/8/la-revolution-citoyenne-dans-les-medias"><span class="label label-default">8</span> La révolution citoyenne dans les médias </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/9/la-republique-garante-des-biens-communs"><span class="label label-default">9</span> La République garante des biens communs </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/10/reconnaitre-la-citoyennete-dans-l-entreprise-et-des-droits-nouveaux-aux-salaries"><span class="label label-default">10</span> Reconnaître la citoyenneté dans l'entreprise et des droits nouveaux aux salariés </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/11/une-justice-au-nom-du-peuple"><span class="label label-default">11</span> Une justice au nom du peuple </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/12/une-politique-antiterroriste-rationnelle"><span class="label label-default">12</span> Une politique antiterroriste rationnelle </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/13/garantir-la-securite-et-la-surete"><span class="label label-default">13</span> Garantir la sécurité et la sûreté </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/14/la-jeunesse-au-service-de-l-interet-general-et-de-la-surete-de-la-nation"><span class="label label-default">14</span> La jeunesse au service de l'intérêt général et de la sûreté de la Nation </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/15/l-egalite-reelle-pour-les-outre-mer"><span class="label label-default">15</span> L'égalité réelle pour les Outre-mer </a>]

On peut étendre cette manière de récupérer les données à toutes les sous-sections :


In [47]:
suburls = ['https://laec.fr/chapitre/1/la-6e-republique', 
           'https://laec.fr/chapitre/2/proteger-et-partager',
           'https://laec.fr/chapitre/3/la-planification-ecologique',
           'https://laec.fr/chapitre/4/sortir-des-traites-europeens',
           'https://laec.fr/chapitre/5/pour-l-independance-de-la-france',
           'https://laec.fr/chapitre/6/le-progres-humain-d-abord',
           'https://laec.fr/chapitre/7/la-france-aux-frontieres-de-l-humanite']

In [48]:
sublinks = []
for suburl in suburls:
    r = requests.get(suburl)
    soup = BeautifulSoup(r.text, 'html.parser')
    sublinks.extend(soup.find_all('a', class_='list-group-item'))

In [49]:
sublinks[:5]


Out[49]:
[<a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/1/reunir-une-assemblee-constituante"><span class="label label-default">1</span> Réunir une Assemblée constituante </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/2/balayer-l-oligarchie-abolir-les-privileges-de-la-caste"><span class="label label-default">2</span> Balayer l'oligarchie, abolir les privilèges de la caste </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/3/une-republique-permettant-l-intervention-populaire"><span class="label label-default">3</span> Une République permettant l'intervention populaire </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/4/abolir-la-monarchie-presidentielle"><span class="label label-default">4</span> Abolir la monarchie présidentielle </a>,
 <a class="list-group-item toc-section toc-chapter-la-6e-republique" href="/section/5/une-nouvelle-etape-des-libertes-et-de-l-emancipation-personnelles"><span class="label label-default">5</span> Une nouvelle étape des libertés et de l'émancipation personnelles </a>]

Combien de propositions trouvons-nous ?


In [50]:
len(sublinks)


Out[50]:
83

Construisons les url complètes.


In [51]:
full_urls = ['https://laec.fr' + link.attrs['href'] for link in sublinks]
full_urls[:10]


Out[51]:
['https://laec.fr/section/1/reunir-une-assemblee-constituante',
 'https://laec.fr/section/2/balayer-l-oligarchie-abolir-les-privileges-de-la-caste',
 'https://laec.fr/section/3/une-republique-permettant-l-intervention-populaire',
 'https://laec.fr/section/4/abolir-la-monarchie-presidentielle',
 'https://laec.fr/section/5/une-nouvelle-etape-des-libertes-et-de-l-emancipation-personnelles',
 'https://laec.fr/section/6/une-republique-universelle',
 'https://laec.fr/section/7/une-republique-laique',
 'https://laec.fr/section/8/la-revolution-citoyenne-dans-les-medias',
 'https://laec.fr/section/9/la-republique-garante-des-biens-communs',
 'https://laec.fr/section/10/reconnaitre-la-citoyennete-dans-l-entreprise-et-des-droits-nouveaux-aux-salaries']

In [52]:
full_url = full_urls[13]
#full_url = full_urls[0]

In [53]:
r = requests.get(full_url)

In [54]:
print(r.text[:800])


<!DOCTYPE html>
<html lang="fr" class="page no-js not-logged-in theme-frontend theme-chapter-la-6e-republique page-section page-section-14">
<!--


░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░█░░░█▀█░█▀▀░█▀▀░░░░█▀▀░█▀▄░░░░
░░░█░░░█▀█░█▀▀░█░░░░░░█▀▀░█▀▄░░░░
░░░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀░░▀░░░▀░▀░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
+===== L'Avenir En Commun ======+

-->
  <head>
    <!-- Classe .js/.no-js https://www.paulirish.com/2009/avoiding-the-fouc-v3/ -->
    <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
    
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <title>La jeunesse au service de l&#039;intérêt général et de la sûreté de la Nation</title>
    <meta name="d

In [55]:
soup = BeautifulSoup(r.text, 'html.parser')

In [56]:
tags = soup.find_all('li', class_='list-group-item')

In [57]:
tag = tags[0]

In [58]:
tag.text


Out[58]:
"Créer un service citoyen obligatoirePour les femmes et les hommesPar conscription avant 25 ans, proche du lieu de vie, en limitant le casernement aux fonctions qui l'exigent réellementD'une durée totale de neuf mois, comprenant une formation militaire initiale incluant un droit à l'objection de conscienceRémunéré au smicAffecté à des tâches d'intérêt général\xa0: secours à la population, sapeurs-pompiers, sécurité publique, défense, sécurité civile, protection et réparation de l'environnement, appui à des associations labellisées d'intérêt généralPrésence sur tout le territoire, y compris les Outre-mer, les zones rurales et les quartiers populairesComprenant un bilan de santé, une évaluation des capacités d'écriture, de lecture et de calcul avec leur éventuelle mise à niveau, la formation gratuite à la conduite et le passage de l'examen du permis de conduire"

In [59]:
tag.find_all('li')


Out[59]:
[<li>Pour les femmes et les hommes</li>,
 <li>Par conscription avant 25 ans, proche du lieu de vie, en limitant le <em>casernement</em> aux fonctions qui l'exigent réellement</li>,
 <li>D'une durée totale de neuf mois, comprenant une formation militaire initiale incluant un droit à l'objection de conscience</li>,
 <li>Rémunéré au <abbr title="Salaire Minimum Interprofessionnel de Croissance">smic</abbr></li>,
 <li>Affecté à des tâches d'intérêt général : secours à la population, sapeurs-pompiers, sécurité publique, défense, sécurité civile, protection et réparation de l'environnement, appui à des associations labellisées d'intérêt général</li>,
 <li>Présence sur tout le territoire, y compris les Outre-mer, les zones rurales et les quartiers populaires</li>,
 <li>Comprenant un bilan de santé, une évaluation des capacités d'écriture, de lecture et de calcul avec leur éventuelle mise à niveau, la formation gratuite à la conduite et le passage de l'examen du permis de conduire</li>]

In [60]:
tag.p.text


Out[60]:
'Créer un service citoyen obligatoire'

In [61]:
"\n".join([t.text for t in tag.find_all('li')])


Out[61]:
"Pour les femmes et les hommes\nPar conscription avant 25 ans, proche du lieu de vie, en limitant le casernement aux fonctions qui l'exigent réellement\nD'une durée totale de neuf mois, comprenant une formation militaire initiale incluant un droit à l'objection de conscience\nRémunéré au smic\nAffecté à des tâches d'intérêt général\xa0: secours à la population, sapeurs-pompiers, sécurité publique, défense, sécurité civile, protection et réparation de l'environnement, appui à des associations labellisées d'intérêt général\nPrésence sur tout le territoire, y compris les Outre-mer, les zones rurales et les quartiers populaires\nComprenant un bilan de santé, une évaluation des capacités d'écriture, de lecture et de calcul avec leur éventuelle mise à niveau, la formation gratuite à la conduite et le passage de l'examen du permis de conduire"

In [62]:
len(tags)


Out[62]:
2

In [63]:
[tag.text for tag in tags]


Out[63]:
["Créer un service citoyen obligatoirePour les femmes et les hommesPar conscription avant 25 ans, proche du lieu de vie, en limitant le casernement aux fonctions qui l'exigent réellementD'une durée totale de neuf mois, comprenant une formation militaire initiale incluant un droit à l'objection de conscienceRémunéré au smicAffecté à des tâches d'intérêt général\xa0: secours à la population, sapeurs-pompiers, sécurité publique, défense, sécurité civile, protection et réparation de l'environnement, appui à des associations labellisées d'intérêt généralPrésence sur tout le territoire, y compris les Outre-mer, les zones rurales et les quartiers populairesComprenant un bilan de santé, une évaluation des capacités d'écriture, de lecture et de calcul avec leur éventuelle mise à niveau, la formation gratuite à la conduite et le passage de l'examen du permis de conduire",
 "Créer une garde nationale placée sous commandement civil et composéeDes jeunes en service citoyen obligatoire ayant choisi d'intégrer la réserve pour la protection de la sûreté et de l'intégrité de la NationDes unités existantes labellisées\xa0: réserve de sécurité nationale, réserve de sécurité civile, réserve citoyenne"]

In [64]:
def extract_data(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    tags = soup.find_all('li', class_='list-group-item')
    contents = []
    for tag in tags:
        if len(tag.find_all('li')) == 0:
            contents.append(tag.text)
        else:
            contents.append(tag.p.text + '\n\t' + "\n\t".join([t.text for t in tag.find_all('li')]))
    return contents

In [65]:
extract_data(full_url)


Out[65]:
["Créer un service citoyen obligatoire\n\tPour les femmes et les hommes\n\tPar conscription avant 25 ans, proche du lieu de vie, en limitant le casernement aux fonctions qui l'exigent réellement\n\tD'une durée totale de neuf mois, comprenant une formation militaire initiale incluant un droit à l'objection de conscience\n\tRémunéré au smic\n\tAffecté à des tâches d'intérêt général\xa0: secours à la population, sapeurs-pompiers, sécurité publique, défense, sécurité civile, protection et réparation de l'environnement, appui à des associations labellisées d'intérêt général\n\tPrésence sur tout le territoire, y compris les Outre-mer, les zones rurales et les quartiers populaires\n\tComprenant un bilan de santé, une évaluation des capacités d'écriture, de lecture et de calcul avec leur éventuelle mise à niveau, la formation gratuite à la conduite et le passage de l'examen du permis de conduire",
 "Créer une garde nationale placée sous commandement civil et composée\n\tDes jeunes en service citoyen obligatoire ayant choisi d'intégrer la réserve pour la protection de la sûreté et de l'intégrité de la Nation\n\tDes unités existantes labellisées\xa0: réserve de sécurité nationale, réserve de sécurité civile, réserve citoyenne"]

In [66]:
extract_data(full_urls[13])


Out[66]:
["Créer un service citoyen obligatoire\n\tPour les femmes et les hommes\n\tPar conscription avant 25 ans, proche du lieu de vie, en limitant le casernement aux fonctions qui l'exigent réellement\n\tD'une durée totale de neuf mois, comprenant une formation militaire initiale incluant un droit à l'objection de conscience\n\tRémunéré au smic\n\tAffecté à des tâches d'intérêt général\xa0: secours à la population, sapeurs-pompiers, sécurité publique, défense, sécurité civile, protection et réparation de l'environnement, appui à des associations labellisées d'intérêt général\n\tPrésence sur tout le territoire, y compris les Outre-mer, les zones rurales et les quartiers populaires\n\tComprenant un bilan de santé, une évaluation des capacités d'écriture, de lecture et de calcul avec leur éventuelle mise à niveau, la formation gratuite à la conduite et le passage de l'examen du permis de conduire",
 "Créer une garde nationale placée sous commandement civil et composée\n\tDes jeunes en service citoyen obligatoire ayant choisi d'intégrer la réserve pour la protection de la sûreté et de l'intégrité de la Nation\n\tDes unités existantes labellisées\xa0: réserve de sécurité nationale, réserve de sécurité civile, réserve citoyenne"]

In [67]:
props_sources = {}
for url in full_urls:
    props_sources[url] = extract_data(url)

In [68]:
df = make_df_from_props_sources(props_sources)
df


Out[68]:
proposition source
0 Injecter 100 milliards d'euros supplémentaires... https://laec.fr/section/18/engager-un-plan-de-...
1 Transformer les 41 milliards d'euros annuels d... https://laec.fr/section/18/engager-un-plan-de-...
2 Remettre à plat l'ensemble des aides publiques... https://laec.fr/section/18/engager-un-plan-de-...
3 Réindustrialiser le pays par l'investissement,... https://laec.fr/section/18/engager-un-plan-de-...
4 Défendre l'exception et la diversité culturell... https://laec.fr/section/77/democratiser-la-cul...
5 Porter le budget consacré à l'art, à la cultur... https://laec.fr/section/77/democratiser-la-cul...
6 Supprimer la Hadopi, qui n'a pas fonctionné, e... https://laec.fr/section/77/democratiser-la-cul...
7 Réaffirmer le rôle des professeurs d'EPS dans ... https://laec.fr/section/78/liberer-le-sport-et...
8 Interdire la cotation en Bourse des clubs spor... https://laec.fr/section/78/liberer-le-sport-et...
9 Interdire à tout sportif qui n'est pas fiscale... https://laec.fr/section/78/liberer-le-sport-et...
10 Garantir l'égalité entre le sport féminin et m... https://laec.fr/section/78/liberer-le-sport-et...
11 Renforcer les liens de solidarité entre le spo... https://laec.fr/section/78/liberer-le-sport-et...
12 Mettre fin à la cotation continue des entrepri... https://laec.fr/section/20/definanciariser-l-e...
13 Moduler les droits de vote des actionnaires se... https://laec.fr/section/20/definanciariser-l-e...
14 Moduler l'impôt sur les sociétés selon l'usage... https://laec.fr/section/20/definanciariser-l-e...
15 Augmenter la mise en réserve légale (aujourd'h... https://laec.fr/section/20/definanciariser-l-e...
16 Interdire aux entreprises de distribuer un mon... https://laec.fr/section/20/definanciariser-l-e...
17 Limiter les LBO aux seules procédures de repri... https://laec.fr/section/20/definanciariser-l-e...
18 Fixer un salaire maximum autorisé pour limiter... https://laec.fr/section/29/instaurer-un-salair...
19 Interdire les parachutes dorés et les retraite... https://laec.fr/section/29/instaurer-un-salair...
20 Supprimer les stock-options https://laec.fr/section/29/instaurer-un-salair...
21 Créer un Plan personnalisé contre la pauvreté ... https://laec.fr/section/33/eradiquer-la-pauvrete
22 Créer une garantie dignité en revalorisant les... https://laec.fr/section/33/eradiquer-la-pauvrete
23 Restructurer les emprunts des ménages surendet... https://laec.fr/section/33/eradiquer-la-pauvrete
24 Atteindre l'objectif de zéro sans-abri : chacu... https://laec.fr/section/33/eradiquer-la-pauvrete
25 Instaurer la gratuité de l'accès et des quanti... https://laec.fr/section/33/eradiquer-la-pauvrete
26 Lutter contre le non-recours aux droits sociau... https://laec.fr/section/33/eradiquer-la-pauvrete
27 Assurer l'isolation d'au moins 700 000 logemen... https://laec.fr/section/40/plan-de-renovation-...
28 Renforcer les programmes locaux de détection d... https://laec.fr/section/40/plan-de-renovation-...
29 Mettre fin aux situations de précarité énergét... https://laec.fr/section/40/plan-de-renovation-...
... ... ...
332 Stopper la contribution de la France au budget... https://laec.fr/section/52/appliquer-un-plan-b...
333 Réquisitionner la Banque de France pour repren... https://laec.fr/section/52/appliquer-un-plan-b...
334 Mettre en place un contrôle des capitaux et de... https://laec.fr/section/52/appliquer-un-plan-b...
335 Construire de nouvelles coopérations avec les ... https://laec.fr/section/52/appliquer-un-plan-b...
336 Rédiger un nouveau Livre blanc et adopter une ... https://laec.fr/section/55/reconstruire-une-de...
337 Stopper les programmes de privatisation des in... https://laec.fr/section/55/reconstruire-une-de...
338 Établir la règle de l'acquisition de matériel ... https://laec.fr/section/55/reconstruire-une-de...
339 Ouvrir la possibilité d'effectuer son service ... https://laec.fr/section/55/reconstruire-une-de...
340 En finir avec la Françafrique : respecter l'in... https://laec.fr/section/62/construire-des-coop...
341 Tenir enfin l'objectif de consacrer 0,7 % du r... https://laec.fr/section/62/construire-des-coop...
342 Relancer la politique de codéveloppement et de... https://laec.fr/section/62/construire-des-coop...
343 Adhérer à la banque de développement des BRICS... https://laec.fr/section/62/construire-des-coop...
344 Soutenir le projet chinois d'une monnaie commu... https://laec.fr/section/62/construire-des-coop...
345 Appuyer la mise en œuvre d'un mécanisme de res... https://laec.fr/section/62/construire-des-coop...
346 Multiplier les coopérations avec les pays émer... https://laec.fr/section/62/construire-des-coop...
347 Instaurer une politique de codéveloppement ave... https://laec.fr/section/62/construire-des-coop...
348 Adopter un plan de transition énergétique avec... https://laec.fr/section/39/100-d-energies-reno...
349 Sortir du nucléaire\n\tFermer immédiatement Fe... https://laec.fr/section/39/100-d-energies-reno...
350 Créer un pôle public de l'énergie pour mener u... https://laec.fr/section/39/100-d-energies-reno...
351 Revenir sur la libéralisation du marché de l'é... https://laec.fr/section/39/100-d-energies-reno...
352 Refuser la logique du choc des civilisations https://laec.fr/section/54/instaurer-l-indepen...
353 Sortir de l'Otan et refuser la participation d... https://laec.fr/section/54/instaurer-l-indepen...
354 Stopper l'érosion du réseau diplomatique franç... https://laec.fr/section/54/instaurer-l-indepen...
355 Sortir du FMI et de la Banque mondiale pour œu... https://laec.fr/section/54/instaurer-l-indepen...
356 Offrir l'asile aux « combattants de la liberté... https://laec.fr/section/54/instaurer-l-indepen...
357 Engager la formation d'une nouvelle alliance a... https://laec.fr/section/54/instaurer-l-indepen...
358 Arrêter les grands projets inutiles, comme l'a... https://laec.fr/section/47/organiser-et-amenag...
359 Inverser la logique des métropoles et des méga... https://laec.fr/section/47/organiser-et-amenag...
360 Stopper l'étalement urbain en incitant au rapp... https://laec.fr/section/47/organiser-et-amenag...
361 Défendre et reconstruire le maillage de transp... https://laec.fr/section/47/organiser-et-amenag...

362 rows × 2 columns

On écrit un fichier.


In [69]:
df.to_csv('../projets/jean_luc_melenchon.csv', index=False, quoting=1)

Emmanuel Macron

Il faut dans un premier temps aller chercher les pages individuelles du site.


In [70]:
r = requests.get('https://en-marche.fr/emmanuel-macron/le-programme')
soup = BeautifulSoup(r.text, 'html.parser')

In [71]:
proposals = soup.find_all(class_='programme__proposal')
proposals = [p for p in proposals if 'programme__proposal--category' not in p.attrs['class']]

In [72]:
len(proposals)


Out[72]:
37

In [73]:
full_urls = ["https://en-marche.fr" + p.find('a').attrs['href'] for p in proposals]

In [74]:
url = full_urls[1]

In [75]:
r = requests.get(url)

In [76]:
text = r.text

In [77]:
text = text.replace('</br>', '')

In [78]:
soup = BeautifulSoup(text, 'html.parser')

In [79]:
article_tag = soup.find_all('article', class_='l__wrapper--slim')[0]

In [80]:
for line in article_tag.find_all(class_='arrows'):
    print(line.text)


Nous rassemblerons les aides et subventions existantes dans une aide unique qui sera fonction de la taille de l’entreprise et du niveau de qualification de l’apprenti.


Nous développerons pour les entreprises un guichet unique permettant d’enregistrer le contrat d’apprentissage et la demande des aides.


Nous ferons converger les deux contrats d’alternance qui existent aujourd’hui en un contrat unique, souple, adapté à la demande des entreprises et des branches, sans borne supérieure d’âge.


Nous affecterons la totalité de la taxe d’apprentissage au financement de l’apprentissage.


Nous unifierons la grille de rémunération des alternants et confierons aux branches le soin d’augmenter par accords les montants des planchers fixés par la loi.


Nous associerons dans l’enseignement secondaire comme dans le supérieur, les branches professionnelles dans la définition des programmes et dans l’organisation des formations. Les branches définiront également les métiers pour lesquels les formations par apprentissage devront être privilégiées.


Nous développerons un « sas » de préparation à l’alternance à la fin du collège pour nous assurer que les élèves maîtrisent les savoirs de base et sont en capacité de s’intégrer à leur entreprise d’accueil. Car la validation des savoirs de base est la condition d’un accès réussi au lycée professionnel ou au CFA.


Nous développerons l’alternance dans tous les lycées professionnels.


Nous ouvrirons la possibilité de préparer des licences professionnelles sur trois ans et en alternance.


Nous agirons pour que l’alternance devienne la voie d’accès dominante aux emplois de qualification moyenne.


Nous rendrons publics les taux d’insertion professionnelle et le salaire à l’issue des formations en apprentissage en vue d’une labellisation des CFA et des lycées professionnels.


Nous nous battrons contre les discriminations dans l’accès à l’apprentissage en imposant des critères de diversité dans le recrutement des apprentis.


In [81]:
tag = article_tag.find_all(class_='arrows')[-1]

In [82]:
tag.text


Out[82]:
'\nNous nous battrons contre les discriminations dans l’accès à l’apprentissage en imposant des critères de diversité dans le recrutement des apprentis.\n'

In [83]:
tag.next_sibling


Out[83]:
'\n'

In [84]:
def extract_items(url):
    r = requests.get(url)
    text = r.text.replace('</br>', '')
    soup = BeautifulSoup(text, 'html.parser')
    article_tag = soup.find_all('article', class_='l__wrapper--slim')[0]
    return [line.text.strip() for line in article_tag.find_all(class_='arrows')]

In [85]:
extract_items(full_urls[1])


Out[85]:
['Nous rassemblerons les aides et subventions existantes dans une aide unique qui sera fonction de la taille de l’entreprise et du niveau de qualification de l’apprenti.',
 'Nous développerons pour les entreprises un guichet unique permettant d’enregistrer le contrat d’apprentissage et la demande des aides.',
 'Nous ferons converger les deux contrats d’alternance qui existent aujourd’hui en un contrat unique, souple, adapté à la demande des entreprises et des branches, sans borne supérieure d’âge.',
 'Nous affecterons la totalité de la taxe d’apprentissage au financement de l’apprentissage.',
 'Nous unifierons la grille de rémunération des alternants et confierons aux branches le soin d’augmenter par accords les montants des planchers fixés par la loi.',
 'Nous associerons dans l’enseignement secondaire comme dans le supérieur, les branches professionnelles dans la définition des programmes et dans l’organisation des formations. Les branches définiront également les métiers pour lesquels les formations par apprentissage devront être privilégiées.',
 'Nous développerons un «\xa0sas\xa0» de préparation à l’alternance à la fin du collège pour nous assurer que les élèves maîtrisent les savoirs de base et sont en capacité de s’intégrer à leur entreprise d’accueil. Car la validation des savoirs de base est la condition d’un accès réussi au lycée professionnel ou au CFA.',
 'Nous développerons l’alternance dans tous les lycées professionnels.',
 'Nous ouvrirons la possibilité de préparer des licences professionnelles sur trois ans et en alternance.',
 'Nous agirons pour que l’alternance devienne la voie d’accès dominante aux emplois de qualification moyenne.',
 'Nous rendrons publics les taux d’insertion professionnelle et le salaire à l’issue des formations en apprentissage en vue d’une labellisation des CFA et des lycées professionnels.',
 'Nous nous battrons contre les discriminations dans l’accès à l’apprentissage en imposant des critères de diversité dans le recrutement des apprentis.']

On extrait toutes les propositions.


In [86]:
propositions = [extract_items(url) for url in full_urls]

In [87]:
len(propositions)


Out[87]:
37

In [88]:
full_urls[18]


Out[88]:
'https://en-marche.fr/emmanuel-macron/le-programme/industrie'

In [89]:
@interact
def print_prop(n=(0, len(propositions) - 1)):
    print(propositions[n])



In [90]:
props_sources = {}
for url, props in zip(full_urls, propositions):
    props_sources[url] = props

In [91]:
df = make_df_from_props_sources(props_sources)

In [92]:
df.head()


Out[92]:
proposition source
0 Nous soutiendrons la constitution d’université... https://en-marche.fr/emmanuel-macron/le-progra...
1 Nous allouerons des moyens supplémentaires au ... https://en-marche.fr/emmanuel-macron/le-progra...
2 Nous ferons de la France le leader mondial de ... https://en-marche.fr/emmanuel-macron/le-progra...
3 Nous donnerons aux universités la possibilité ... https://en-marche.fr/emmanuel-macron/le-progra...
4 Nous donnerons aux universités et aux grandes ... https://en-marche.fr/emmanuel-macron/le-progra...

In [93]:
df.iloc[0, 1]


Out[93]:
'https://en-marche.fr/emmanuel-macron/le-programme/enseignement-superieur-recherche'

In [94]:
df.to_csv('../projets/emmanuel_macron.csv', index=False, quoting=1)

Yannick Jadot


In [95]:
r = requests.get('http://avecjadot.fr/lafrancevive/')

In [96]:
soup = BeautifulSoup(r.text, 'html.parser')

In [97]:
tags = soup.find_all('div', class_='bloc-mesure')

In [98]:
links = [tag.find('a').attrs['href'] for tag in tags]

In [99]:
all([link.startswith('http://avecjadot.fr/') for link in links])


Out[99]:
True

Extraction du titre d'une des pages.


In [100]:
link = links[0]

In [101]:
r = requests.get(link)

In [102]:
soup = BeautifulSoup(r.text, 'html.parser')

In [103]:
soup.find('div', class_='texte-mesure').text.strip().replace('\n', ' ')


Out[103]:
'Adopter une loi de sortie progressive et définitive du nucléaire d’ici 2035, arrêter les premiers réacteurs dès 2017.'

In [104]:
def extract_data(link):
    r = requests.get(link)
    soup = BeautifulSoup(r.text, 'html.parser')
    return soup.find('div', class_='texte-mesure').text.strip().replace('\n', ' ')

In [105]:
extract_data(link)


Out[105]:
'Adopter une loi de sortie progressive et définitive du nucléaire d’ici 2035, arrêter les premiers réacteurs dès 2017.'

In [106]:
all_props = [extract_data(link) for link in links]

In [107]:
props_sources = {}
for url, props in zip(links, all_props):
    props_sources[url] = [props]

In [108]:
props_sources


Out[108]:
{'http://avecjadot.fr/lafrancevive/1-budget-de-letat-consacre-aux-projets-choisis-citoyens-via-plateformes-civic-tech/': ['Adopter le 1% budget participatif.'],
 'http://avecjadot.fr/lafrancevive/1-million-de-jeunes-an-emploi-formation-pays-de-lunion/': ['Envoyer chaque année 1 million de jeunes en emploi ou en formation dans un autre pays de l’Union européenne.'],
 'http://avecjadot.fr/lafrancevive/2-de-dechets-2030-distribution-invendus-valorisation-compostage/': ['Aller vers une France zéro déchet en divisant par 2 notre production de déchets par habitant à l’horizon 2030. → \xa0\xa0 \xa0 Mettre en place un plan national de lutte contre le gaspillage alimentaire dans les cantines. → \xa0\xa0 \xa0 Rendre obligatoire la redistribution des invendus de la grande distribution vers les associations de solidarité, et l’élevage pour les déchets très périmés. → \xa0\xa0 \xa0 Valoriser énergétiquement les fermentescibles en généralisant la méthanisation. → \xa0\xa0 \xa0 Développer le compostage collectif dans les zones d’habitat dense. → \xa0\xa0 \xa0 Introduire un critère « zéro déchet » dans les marchés publics.'],
 'http://avecjadot.fr/lafrancevive/3-1-redistributif-citoyen-1-benefices-de-secteurs-cibles-dedies-a-projets-citoyens/': ['Adopter le 3 fois 1% redistributif citoyen. → 1% des bénéfices de l’agroalimentaire pour financer des projets citoyens d’alimentation de qualité relocalisée. → 1% des bénéfices des promoteurs immobiliers pour financer les actions citoyennes en matière d’urbanisme. → 1% des bénéfices du secteur de la publicité pour financer des médias citoyens.'],
 'http://avecjadot.fr/lafrancevive/425/': ['Faire évoluer le mandat et la composition du Conseil économique, social et environnemental pour en faire une troisième chambre, aux côtés de l’Assemblée nationale et du Sénat, qui aurait un droit de veto suspensif sur toute mesure législative qui mettrait en cause le long terme.'],
 'http://avecjadot.fr/lafrancevive/5-montant-de-reserve-parlementaire-affectee-a-projets-dexpertise-citoyenne/': ['Créer un fonds pour une démocratie d’initiative citoyenne, financé par un prélèvement de 5% sur les financements de la démocratie représentative : partis politiques, réserves parlementaires, campagnes électorales.'],
 'http://avecjadot.fr/lafrancevive/abandonner-convention-de-dublin-partager-equitablement-laccueil-refugies-sein-de-lue/': ['Abandonner la Convention de Dublin et partager équitablement l’accueil et l’intégration des réfugiés dans les pays de l’Union.'],
 'http://avecjadot.fr/lafrancevive/accroitre-laide-publique-developpement-a-07-pnb/': ['Accroître l’Aide Publique au Développement à la hauteur de l’engagement international de la France, c’est-à-dire à 0,7% du PNB à l’horizon 2022.'],
 'http://avecjadot.fr/lafrancevive/accroitre-louverture-marches-publics-aux-entreprises-de-leconomie-sociale-solidaire/': ['Développer l’économie sociale et solidaire. → Accroître l’ouverture des marchés publics aux entreprises agréées Entreprise Solidaire d’Utilité Sociale.'],
 'http://avecjadot.fr/lafrancevive/adopter-plan-dinvestissement-de-600-milliards-deuros-an-lancer-transition/': ['Adopter un plan d’investissement de 600 milliards d’euros par an, financé par la Banque européenne d’investissement et les banques nationales d’investissement, garanti ou racheté par la Banque centrale européenne, avec 4 priorités. → La transition énergétique. → Le numérique. → Les infrastructures de transport du quotidien. → La santé.'],
 'http://avecjadot.fr/lafrancevive/afficher-service-public-part-payee-collectivite/': ['Afficher pour chaque service public la part payée par la collectivité.'],
 'http://avecjadot.fr/lafrancevive/aider-toutes-familles-creant-400-000-places-creche/': ['Aider toutes les familles. → \t Créer de 400 000 places en crèche.'],
 'http://avecjadot.fr/lafrancevive/alimentation-saine-financer-conversion-vers-lagriculture-bio-100-de-bio-a-cantine/': ['Garantir une alimentation saine. → Approvisionner 100% des cantines publiques et privées par l’agriculture paysanne ou biologique : écoles, hôpitaux, entreprises, etc. → Affecter 50% des fonds de la PAC pour financer la conversion des exploitations et la structuration des filières.'],
 'http://avecjadot.fr/lafrancevive/aller-vers-defense-europeenne-commune/': ['Aller vers une défense européenne commune.'],
 'http://avecjadot.fr/lafrancevive/assainir-secteur-bancaire-notamment-separant-activites-de-banque-de-detail-de-credit/': ['Renforcer les ratios prudentiels des banques et séparer les activités de banque de détail et de banque de crédit.'],
 'http://avecjadot.fr/lafrancevive/assurer-a-revenu-dexistence-defini-conference-de-consensus-debat-national/': ['Assurer à tou-te-s un revenu d’existence. → \t Expérimenter un revenu de base dont les conditions seront définies lors d’une conférence de consensus suivie d’un débat national. Cette question n’est pas celle des minima sociaux, il faut changer la place du travail et reconnaître l’utilité sociale de chacune et de chacun.'],
 'http://avecjadot.fr/lafrancevive/baser-prioritairement-programme-de-renovation-thermique-bati-pme-lartisanat-local/': ['Baser prioritairement le programme de rénovation thermique du bâti sur les PME et l’artisanat local.'],
 'http://avecjadot.fr/lafrancevive/conference-internationale-de-sanctuarisation-de-larctique-2/': ['Prendre l’initiative d’une conférence internationale dont l’objectif sera de sanctuariser l’Arctique.'],
 'http://avecjadot.fr/lafrancevive/consommer-mieux-credit-impot-reparation-garanties-plus-longues-eco-conception/': ['Favoriser l’économie circulaire et lutter contre l’obsolescence programmée des produits. → \xa0\xa0 \xa0 5 ans de garantie minimale pour l’électroménager et les voitures. → \xa0\xa0 \xa0 Moduler la TVA selon l’éco-conception, la réparabilité, la réutilisation et le recyclage d’un produit. → \xa0\xa0 \xa0 Créer un Crédit d’impôt réparation permettant de rembourser 50% des frais de main d’oeuvre. → \xa0\xa0 \xa0 Créer une filière de déconstruction des navires en fin de vie et de traitement des déchets électroniques.'],
 'http://avecjadot.fr/lafrancevive/constitutionnaliser-lecologie-inscrire-republique-ecologique-constitution/': ['Modifier la Constitution pour que dans l’article premier soit inscrit « République écologique », afin de constitutionnaliser l’écologie.'],
 'http://avecjadot.fr/lafrancevive/contrats-territoriaux-de-transition-ecologique-accompagner-conversion-de-economie/': ['Négocier des contrats territoriaux de transition écologique de 10 ans entre les collectivités locales, l’État, les entreprises, les syndicats et les organisations de la société civile pour anticiper et favoriser les conversions économiques et industrielles. → Accompagner et former les salariés : aucun travailleur abandonné sur le bord de la route.'],
 'http://avecjadot.fr/lafrancevive/culture-1-budget-de-letat-dedie-a-culture/': ['La culture pour tous. → \t Dédier 1% du budget de l’État à la Culture.'],
 'http://avecjadot.fr/lafrancevive/donner-choix-aux-aine-es-autant-de-places-ehpad-public-quen-etablissements-prives/': ['Donner le choix à nos aîné-es. → \t Créer au moins autant de places en EHPAD public qu’en établissements privés sur chaque territoire.'],
 'http://avecjadot.fr/lafrancevive/eco-campus-leviers-de-transition-ecologique-eco-conception-cantines-bio-etc/': ['Faire de l’immobilier universitaire un levier de la transition écologique par le développement d’éco-campus. → \t Plan général de rénovation du bâti universitaire avec 70 000 rénovations et 50 000 nouvelles chambres éco- conçues, alimentation bio et locale dans les cantines, centres de santé, etc.'],
 'http://avecjadot.fr/lafrancevive/election-2019-dune-assemblee-constituante-a-partir-de-conventions-citoyennes/': ['Faire élire en 2019 une assemblée constituante dont le travail se fonde sur des conventions citoyennes régionales et nationales.'],
 'http://avecjadot.fr/lafrancevive/faire-de-formation-droit-creer-compte-individuel-de-formation-long-de-vie/': ['Faire de la formation un droit tout au long de la vie. → Créer un compte individuel de formation crédité de 16 semestres de formation à utiliser à tout moment de sa vie après 16 ans.'],
 'http://avecjadot.fr/lafrancevive/faire-france-accessible-creer-lagence-nationale-de-laccessibilite-universelle/': ['Faire une France accessible aux personnes en situation de handicap. → \t Garantir l’accessibilité de tous les services publics en créant une Agence nationale de l’accessibilité universelle.'],
 'http://avecjadot.fr/lafrancevive/faire-reseau-de-maisons-services-publics-appuye-reseau-bureaux-de-poste/': ['Tirer parti de l’extraordinaire réseau que constituent les bureaux de Poste, pour en faire des Maison des services publics.'],
 'http://avecjadot.fr/lafrancevive/faire-salaries-decideurs-50-de-salaries-conseils-dadministration/': ['Inscrire dans la loi la co-gestion des entreprises. → Faire siéger 50% de salariés dans les Conseils d’Administration.'],
 'http://avecjadot.fr/lafrancevive/favoriser-reduction-temps-de-travail-semaine-plusieurs-annees/': ['Favoriser la réduction du temps de travail, sur la semaine ou sur plusieurs années.'],
 'http://avecjadot.fr/lafrancevive/fin-niches-fiscales-nuisibles-a-lenvironnement-economiser-13-milliards-an/': ['Développer la fiscalité écologique. → En finir avec les niches fiscales nuisibles à l’environnement et la santé (13 milliards d’euros par an), dont la niche diesel. → Affecter la moitié des dépenses économisées à une prime de conversion automobile pour les ménages les plus vulnérables.'],
 'http://avecjadot.fr/lafrancevive/financer-nos-transports-quotidien-taxe-poids-lourds-abandon-grands-projets-inutiles/': ['Développer les réseaux de transports du quotidien. → \t Engager une révision complète du schéma national des infrastructures. → \t Abandonner les grands projets inutiles : nouvelles lignes à grande vitesse, tunnel Lyon-Turin, aéroport de Notre-Dame-des-Landes, Grand Contournement Ouest de Strasbourg, etc. → \t Restaurer la taxe poids lourds pour donner l’absolue priorité aux trajets domicile-travail et domicile-vie quotidienne.'],
 'http://avecjadot.fr/lafrancevive/fiscalite-plus-reformer-fiscalite-patrimoine-individualiser-limpot-revenu/': ['Mettre en place une fiscalité plus juste et plus lisible. → Réformer la fiscalité du patrimoine en tenant compte du patrimoine net. → Fusionner l’impôt sur le revenu avec la CSG et la rendre progressive. → Individualiser l’impôt sur le revenu.'],
 'http://avecjadot.fr/lafrancevive/garantir-justice-fiscale-transparence-fin-de-levasion-harmoniser-fiscalite-europeenne/': ['Stopper l’évasion et construire l’harmonisation fiscale, garantir la transparence et imposer le reporting pays par pays pour lutter contre l’évasion fiscale, et que chaque entreprise paie des impôts là où elle gagne de l’argent.'],
 'http://avecjadot.fr/lafrancevive/inscrire-usages-numerique-lensemble-parcours-scolaire-de-maternelle-superieur/': ['Inscrire les usages du numérique dans l’ensemble du parcours scolaire, de la maternelle aux études supérieures.'],
 'http://avecjadot.fr/lafrancevive/interdiction-ventes-darmes-aux-pays-non-democratiques/': ['Interdire les ventes d’armes aux pays non démocratiques.'],
 'http://avecjadot.fr/lafrancevive/interdire-lelevage-intensif-industriel-suivre-directives-de-commission-denquete-abattage/': ['Lutter contre la souffrance animale. → \t Interdire l’élevage industriel de type « 1000 vaches ». → \t Mettre en application les 65 préconisations avancées par le rapport de la commission d’enquête sur les conditions d’abattage.'],
 'http://avecjadot.fr/lafrancevive/jeunes-adultes-autres-rsa-accessible-18-25-ans/': ['Les jeunes sont des adultes comme les autres. → \t Rendre le RSA accessible pour les 18-25 ans.'],
 'http://avecjadot.fr/lafrancevive/legalite-prime-lidentite-recepisse-lors-controles-facies-droit-de-vote-etrangers/': ['L’égalité doit primer sur l’identité, la citoyenneté sur la nationalité. → Mettre en place le récépissé pour éviter le contrôle au faciès. → Instaurer le droit de vote des étrangers aux élections locales.'],
 'http://avecjadot.fr/lafrancevive/loi-cadre-violences-aux-femmes-integrant-revision-delai-de-prescription/': ['Adopter une loi cadre sur les violence faites aux femmes, intégrant notamment une révision du délai de prescription.'],
 'http://avecjadot.fr/lafrancevive/lutte-contre-levasion-fiscale-plus-de-pouvoir-a-societe-civile-penaliser-paradis-fiscaux/': ['Renforcer la lutte contre l’évasion fiscale. → Renforcer le droit de la société civile de saisir le parquet national financier pour les cas d’évasions fiscales. → Agir pour le contrôle de la taille des banques et pour la pénalisation les paradis fiscaux.'],
 'http://avecjadot.fr/lafrancevive/lutter-contre-precarite-encadrement-loyers-garantie-universelle-loyers/': ['Lutter contre la précarité et favoriser l’autonomie. → \t Généraliser l’encadrement des loyers dans les zones tendues. → \t Instaurer la garantie universelle des loyers.'],
 'http://avecjadot.fr/lafrancevive/lutter-contre-souffrance-travail-cotisations-retraite-compte-penibilite-etc/': ['Lutter contre la souffrance au travail. → \t Moduler les cotisations accidents du travail et maladies professionnelles avec l’adoption d’un plan pour le bien-être au travail dans les entreprises. → \t Égalité de chacun devant la retraite : renforcer le compte pénibilité et le porter jusqu’à 7 ans. → \t Reconnaître le burn-out comme maladie professionnelle. → \t Généraliser le droit automatique à la déconnexion.'],
 'http://avecjadot.fr/lafrancevive/mettre-veritablement-oeuvre-taxe-transactions-financieres/': ['Mettre véritablement en œuvre la Taxe sur les Transactions Financières.'],
 'http://avecjadot.fr/lafrancevive/ministere-garantir-transversalite-de-mutation-digitale-neutralite-reseaux/': ['Créer un ministère de la Transformation numérique dépendant du Premier ministre pour impulser et garantir la transversalité de la mutation à conduire, de l’école à l’entreprise, de la culture aux services publics ; garantir la neutralité des réseaux.'],
 'http://avecjadot.fr/lafrancevive/nommer-vice-premier-ministre-developpement-durable-prise-compte-de-lecologie/': ['Nommer un vice-Premier ministre au Développement durable pour garantir la prise en compte transversale des enjeux écologiques.'],
 'http://avecjadot.fr/lafrancevive/nouvelle-politique-commerciale-de-lue-primaute-droits-humains-sociaux-environnementaux/': ['Refonder la politique commerciale de l’Union pour faire de l’Europe un vecteur de régulation publique de la mondialisation. → Primauté des droits humains, sociaux et de l’environnement sur les droits du commerce et des investisseurs.'],
 'http://avecjadot.fr/lafrancevive/offrir-moyens-supplementaires-lutter-contre-decrochage-lechec-scolaire/': ['Lutter contre le décrochage et l’échec scolaire. → \t Offrir des moyens supplémentaires, comme le travail en plus petit effectif, aux élèves qui en ont le plus besoin pour leur réussite.'],
 'http://avecjadot.fr/lafrancevive/orienter-lepargne-vers-capital-risque-entreprises-de-transition-ecologique-numerique/': ['Orienter l’épargne vers le capital-risque des entreprises innovantes, ancrées dans la transition écologique et numérique.'],
 'http://avecjadot.fr/lafrancevive/perenniser-protection-intermittents-creer-fonds-artistes-plasticiens/': ['Pérenniser le système de protection des intermittents, et créer un fonds de protection pour les artistes plasticiens.'],
 'http://avecjadot.fr/lafrancevive/politiques-culturelles-locales-incubateurs-lieux-dedies-dispositifs-de-cooperation-etc/': ['Soutenir les politiques locales facilitant l’expression des énergies créatives dans les territoires : incubateurs culturels, lieux tiers dédiés aux expérimentations artistiques et aux rencontres non marchandes avec les publics, dispositifs de mutualisation et de coopération en faveur des nouveaux projets et artistes, etc.'],
 'http://avecjadot.fr/lafrancevive/preserver-sante-luttant-contre-pollutions-diesel-perturbateurs-endocriniens-etc/': ['Préserver notre santé en luttant contre les pollutions. → \t Interdire le glyphosate et les perturbateurs endocriniens. → \t Sortir du diesel. → \t Contrôler strictement l’homologation des nanotechnologies.'],
 'http://avecjadot.fr/lafrancevive/protection-sociale-assuree-acces-a-retraite-chomage-a-formation/': ['Garantir à tou-te-s une protection sociale équivalente : l’accès à la retraite, au chômage, à la formation et d’une manière générale à la protection sociale des travailleurs indépendants et des auto-entrepreneurs sera assuré.'],
 'http://avecjadot.fr/lafrancevive/proteger-biodiversite-zero-pesticide-2030-augmentation-de-surface-cultivee-bio-etc/': ['Protéger notre biodiversité. → \t Vers une France zéro pesticide en 2030, avec 50% de réduction des pesticides sur le quinquennat. → \t Multiplier par 4 la surface cultivée en bio en 5 ans pour la porter à 20% de la surface agricole utile. → \t Lutter contre l’artificialisation des sols : espaces naturels et agricoles, et espaces péri-urbains. → \t Renforcer les mesures de protection de la biodiversité là où elle est particulièrement riche et menacée, notamment dans les territoires ultra-marins et les océans.'],
 'http://avecjadot.fr/lafrancevive/reconnaitre-toutes-familles-ouvrir-pma-a-toutes-femmes/': ['Reconnaître toutes les familles. → \t Ouvrir la PMA à toutes les femmes.'],
 'http://avecjadot.fr/lafrancevive/remplacement-obligatoire-enseignants-apres-3-jours-dabsence/': ['Remplacer obligatoirement les enseignants après 3 jours d’absence.'],
 'http://avecjadot.fr/lafrancevive/rendre-publique-liste-entreprises-ne-respectant-legalite-salariale-femmes-hommes/': ['Faire de l’égalité Femmes-Hommes un impératif. → \t Rendre publique la liste des entreprises ne respectant pas l’égalité salariale.'],
 'http://avecjadot.fr/lafrancevive/renforce-la-lutter-contre-discriminations-liees-a-l-identite-de-genre/': ['Renforcer la lutte contre les discriminations liées à l’identité de genre et à l’orientation sexuelle. → Renforcer la sensibilisation contre l’homophobie, la lesbophobie, la biphobie et la transphobie. → Former et informer les personnels de la fonction publique à l’accueil des personnes LGBT. → Permettre le changement d’état civil libre, gratuit, déclaratif et basé sur l’autodétermination pour les personnes trans.'],
 'http://avecjadot.fr/lafrancevive/renforcement-droit-de-mourir-dignite-a-choisir-fin-de-vie/': ['Renforcer le droit de mourir dans la dignité et à choisir sa fin de vie.'],
 'http://avecjadot.fr/lafrancevive/renforcer-services-publics-adapter-aux-nouveaux-besoins-notamment-de-nos-aine-e-s/': ['Renforcer les services publics et les adapter aux nouveaux besoins, notamment ceux de nos aîné-es de plus en plus nombreux.'],
 'http://avecjadot.fr/lafrancevive/renoncer-a-force-de-dissuasion-nucleaire-faire-sanctuaire-europeen-denuclearise/': ['Remplacer la stratégie de dissuasion nucléaire par un sanctuaire européen « dénucléarisé », et oeuvrer à une diplomatie active en faveur du désarmement nucléaire. → De manière à créer cette dynamique, renoncer de manière unilatérale aux composantes aériennes de la force de dissuasion nucléaire. → Affecter l’économie ainsi réalisée à la remise à niveau des moyens des forces conventionnelles.'],
 'http://avecjadot.fr/lafrancevive/renouveler-democratie-400-deputes-elus-a-proportionnelle-votations-assemblees-citoyennes/': ['Sortir de la monarchie républicaine. → Une Assemblée de 400 députés, à l’image des Français, élue à la proportionnelle, avec 20% de jeunes de moins de 30 ans. → Développer des votations citoyennes sur des sujets du quotidien, les conférences de consensus et les assemblées citoyennes tirées au sort.'],
 'http://avecjadot.fr/lafrancevive/renovation-thermique-de-750-000-logements-an-donnant-priorite-aux-menages-precaires/': ['Lutter contre le gaspillage et éradiquer les passoires énergétiques. → \xa0\xa0 \xa0 Aller vers 750 000 logements par an rénovés d’ici la fin du quinquennat, en donnant la priorité aux ménages victimes de précarité énergétique.'],
 'http://avecjadot.fr/lafrancevive/revaloriser-smic-a-1800-euros-bruts-mandature/': ['Revaloriser le SMIC à 1800 euros bruts dans la mandature.'],
 'http://avecjadot.fr/lafrancevive/revoir-a-hausse-nos-objectifs-matiere-denergies-renouvelables-de-gaz-a-effet-de-serre/': ['Les objectifs en matière d’énergies renouvelables seront respectés pour 2020 (23% du mix énergétique) et rehaussés à 40% pour 2030. Le cadre administratif et législatif sera simplifié et stabilisé. Les objectifs de réduction des gaz à effet de serre seront portés à 30% pour 2020 et au moins 50% pour 2030 par rapport à 1990 afin de mettre en œuvre l’Accord de Paris sur le climat.'],
 'http://avecjadot.fr/lafrancevive/sanctionner-commerce-pays-ne-respectant-liberte-syndicale-lenvironnement/': ['Interdire en 5 ans sur le marché européen les produits issus de pays ne respectant pas la liberté syndicale et taxer ceux provenant de pays s’exonérant de la lutte contre le dérèglement climatique.'],
 'http://avecjadot.fr/lafrancevive/sante-priorite-nationale-favoriser-prevention-lutter-contre-deserts-medicaux-2/': ['Faire de la santé une priorité nationale. → \t Réorienter notre système de santé vers la prévention et la proximité, lutter en amont contre les maladies chroniques, réaffirmer la primauté de la sécurité sociale vis-à-vis des complémentaires. → \t En finir avec les déserts médicaux, en soutenant l’installation des médecins dans des maisons de santé adossées à des unités de base des premiers soins. → \t Renforcer le service public de la psychiatrie.'],
 'http://avecjadot.fr/lafrancevive/se-reapproprier-energie-projet-denergie-renouvelable-quartier-commune-rurale-2/': ['Favoriser l’appropriation citoyenne locale de la transition énergétique. → \xa0\xa0 \xa0 1 projet de production d’énergies renouvelables par quartier ou commune rurale. → \xa0\xa0 \xa0 Les projets de propriété collective seront accompagnés par des opérateurs coopératifs certifiés et rémunérés par l’État qui garantira les emprunts. → \xa0\xa0 \xa0 25% des parts sociales des projets d’énergies renouvelables devront être proposées aux citoyens locaux.'],
 'http://avecjadot.fr/lafrancevive/securiser-populations-renforcant-justice-legalisant-cannabis-creant-fbi-europeen/': ['Assurer notre sécurité. → Développer une police de proximité pour assurer une présence physique partout, au contact des citoyennes et citoyens. → Renforcer les moyens de la justice afin de lui permettre d’assurer plus rapidement la justice du quotidien : un cas est jugé en 19 jours au Danemark, contre 304 jours en France. → Créer un parquet et un FBI européens afin de lutter de manière plus efficace contre le terrorisme. → Légaliser le cannabis –monopole d’état pour lutter contre le trafic et faciliter une politique de santé.'],
 'http://avecjadot.fr/lafrancevive/simplifier-plafonner-credit-impot-recherche-privilegier-transition-energetique/': ['Favoriser la Recherche & Développement. → Mieux cibler les soutiens à l’innovation en simplifiant et plafonnant le crédit impôt recherche. → Privilégier les innovations qui participent à la transition énergétique'],
 'http://avecjadot.fr/lafrancevive/small-business-act-50-marches-publics-pme-start-ups-emploient-localement/': ['Lancer un Small Business Act. → Réserver 50% des marchés publics aux PME/PMI et aux start-ups qui emploient localement.'],
 'http://avecjadot.fr/lafrancevive/sortir-progressivement-nucleaire-dici-2035-arretant-premiers-reacteurs-2017/': ['Adopter une loi de sortie progressive et définitive du nucléaire d’ici 2035, arrêter les premiers réacteurs dès 2017.'],
 'http://avecjadot.fr/lafrancevive/stopper-negociations-accords-de-libre-echange-dont-tafta-ratification-ceta/': ['Stopper les négociations des accords de libre-échange, dont le TAFTA, et la ratification du CETA.'],
 'http://avecjadot.fr/lafrancevive/suppression-de-publicite-a-destination-de-jeunesse-programmes-jeunesse/': ['Lutter contre la publicité à destination des jeunes. → \t Interdire la publicité télévisée destinée aux enfants et supprimer les publicités sur tous les supports lors des programmes jeunesse'],
 'http://avecjadot.fr/lafrancevive/suppression-droit-de-veto-aux-nations-unies-siege-unique-lunion-europeenne/': ['Réformer le Conseil de sécurité des Nations unies. → Supprimer le droit de veto. → Faire du siège de la France le siège unique de l’Union européenne.'],
 'http://avecjadot.fr/lafrancevive/valoriser-peche-artisanale-francaise-label-renforcer-lutte-contre-peche-illegale/': ['Créer un label valorisant la pêche artisanale française pour les consommateurs, renforcer la lutte contre la pêche illégale, en particulier dans les zones ultra-marines.']}

In [109]:
df = make_df_from_props_sources(props_sources)

In [110]:
df.head()


Out[110]:
proposition source
0 Sortir de la monarchie républicaine. → Une Ass... http://avecjadot.fr/lafrancevive/renouveler-de...
1 Faire de l’égalité Femmes-Hommes un impératif.... http://avecjadot.fr/lafrancevive/rendre-publiq...
2 Soutenir les politiques locales facilitant l’e... http://avecjadot.fr/lafrancevive/politiques-cu...
3 Lutter contre la publicité à destination des j... http://avecjadot.fr/lafrancevive/suppression-d...
4 Lutter contre la souffrance au travail. → \t M... http://avecjadot.fr/lafrancevive/lutter-contre...

In [111]:
df.to_csv('../projets/yannick_jadot.csv', index=False, quoting=1)

Nicolas Dupont-Aignan


In [112]:
r = requests.get('http://www.nda-2017.fr/themes.html')
soup = BeautifulSoup(r.text, 'html.parser')

In [113]:
len(soup.find_all('div', class_='theme'))


Out[113]:
29

In [114]:
links = ['http://www.nda-2017.fr' + tag.find('a').attrs['href'] for tag in soup.find_all('div', class_='theme')]

In [115]:
link = links[0]

In [116]:
r = requests.get(link)

In [117]:
soup = BeautifulSoup(r.text, 'html.parser')

In [118]:
tags = soup.find_all('div', class_='proposition')

In [119]:
len(tags)


Out[119]:
17

In [120]:
tags[0].find('a').text.strip()


Out[120]:
'Exiger pour tout candidat à un mandat électif un casier judiciaire vierge.'

In [121]:
tags[0].find('a').attrs['href']


Out[121]:
'#proposition32'

In [122]:
def extract_data(link):
    r = requests.get(link)
    soup = BeautifulSoup(r.text, 'html.parser')
    tags = soup.find_all('div', class_='proposition')
    return [tag.find('a').text.strip() for tag in tags]

In [123]:
all_props = [extract_data(link) for link in links]

In [124]:
len(all_props)


Out[124]:
29

In [125]:
props_sources = {}
for url, props in zip(links, all_props):
    props_sources[url] = props

In [126]:
df = make_df_from_props_sources(props_sources)

In [127]:
df


Out[127]:
proposition source
0 Créer un grand ministère de la Culture engloba... http://www.nda-2017.fr/theme/culture-patrimoine
1 Consacrer 1% du budget de la nation à la culture. http://www.nda-2017.fr/theme/culture-patrimoine
2 Relancer la commande publique. http://www.nda-2017.fr/theme/culture-patrimoine
3 Consacrer 0,5% du budget de tous les grands pr... http://www.nda-2017.fr/theme/culture-patrimoine
4 Réaliser l’inventaire des richesses patrimonia... http://www.nda-2017.fr/theme/culture-patrimoine
5 Lancer un programme massif de numérisation du ... http://www.nda-2017.fr/theme/culture-patrimoine
6 Harmoniser les outils de protection du patrimo... http://www.nda-2017.fr/theme/culture-patrimoine
7 Intégrer le respect du patrimoine bâti et pays... http://www.nda-2017.fr/theme/culture-patrimoine
8 Créer une labellisation de ce patrimoine non p... http://www.nda-2017.fr/theme/culture-patrimoine
9 Développer la Fondation du patrimoine pour la ... http://www.nda-2017.fr/theme/culture-patrimoine
10 Renforcer les formations aux métiers du patrim... http://www.nda-2017.fr/theme/culture-patrimoine
11 Rétablir les crédits d’entretien et de restaur... http://www.nda-2017.fr/theme/culture-patrimoine
12 Sanctuariser le dispositif Malraux d'exonérati... http://www.nda-2017.fr/theme/culture-patrimoine
13 Créer un fond de sauvegarde du patrimoine rura... http://www.nda-2017.fr/theme/culture-patrimoine
14 Créer un tirage de loto lors des Journées du p... http://www.nda-2017.fr/theme/culture-patrimoine
15 Utiliser les chantiers publics de restauration... http://www.nda-2017.fr/theme/culture-patrimoine
16 Mettre en valeur les DOM-COM et utiliser le to... http://www.nda-2017.fr/theme/culture-patrimoine
17 Créer une délégation interministérielle aux pa... http://www.nda-2017.fr/theme/culture-patrimoine
18 Clarifier le rôle des collectivités territoria... http://www.nda-2017.fr/theme/culture-patrimoine
19 Créer une délégation interministérielle entre ... http://www.nda-2017.fr/theme/culture-patrimoine
20 Simplifier et clarifier les compétences des co... http://www.nda-2017.fr/theme/culture-patrimoine
21 Développer la Fondation du patrimoine pour la ... http://www.nda-2017.fr/theme/culture-patrimoine
22 Eveiller les enfants à la connaissance du patr... http://www.nda-2017.fr/theme/culture-patrimoine
23 Mettre en place un véritable enseignement d’hi... http://www.nda-2017.fr/theme/culture-patrimoine
24 Introduire un contingent de places allouées au... http://www.nda-2017.fr/theme/culture-patrimoine
25 Faire de l’enseignement artistique une priorit... http://www.nda-2017.fr/theme/culture-patrimoine
26 Permettre à tous les élèves de primaire de pré... http://www.nda-2017.fr/theme/culture-patrimoine
27 Instaurer la gratuité des musées le dimanche p... http://www.nda-2017.fr/theme/culture-patrimoine
28 Offrir un « ticket découverte culturelle » par... http://www.nda-2017.fr/theme/culture-patrimoine
29 Mettre les services publics audiovisuels au se... http://www.nda-2017.fr/theme/culture-patrimoine
... ... ...
733 Investir dans la couverture numérique de la Fr... http://www.nda-2017.fr/theme/environnement-ene...
734 Alléger la fiscalité sur les terres non-bâties... http://www.nda-2017.fr/theme/environnement-ene...
735 Augmenter la Taxe sur les surfaces commerciale... http://www.nda-2017.fr/theme/environnement-ene...
736 Rétablir des autorisations pour la création de... http://www.nda-2017.fr/theme/environnement-ene...
737 Augmenter le réseau d’aires marines protégées ... http://www.nda-2017.fr/theme/environnement-ene...
738 Mettre en place une politique forte pour rédui... http://www.nda-2017.fr/theme/environnement-ene...
739 Dispenser des cours de santé/bien-être au coll... http://www.nda-2017.fr/theme/environnement-ene...
740 Lancer des campagnes de prévention informant l... http://www.nda-2017.fr/theme/environnement-ene...
741 Lutter efficacement contre les zones atypiques... http://www.nda-2017.fr/theme/environnement-ene...
742 Interdire l'implantation d’antennes-relais à p... http://www.nda-2017.fr/theme/environnement-ene...
743 Créer des comités d’experts indépendants pour ... http://www.nda-2017.fr/theme/environnement-ene...
744 Imposer aux abattoirs des cahiers des charges ... http://www.nda-2017.fr/theme/environnement-ene...
745 Interdire la viande provenant d’abattoirs qui ... http://www.nda-2017.fr/theme/environnement-ene...
746 Installer la vidéosurveillance dans les abatto... http://www.nda-2017.fr/theme/environnement-ene...
747 Négocier avec les cultes une solution respectu... http://www.nda-2017.fr/theme/environnement-ene...
748 Encourager l’élevage de qualité et créer un la... http://www.nda-2017.fr/theme/environnement-ene...
749 Soutenir et mieux répartir les refuges qui son... http://www.nda-2017.fr/theme/environnement-ene...
750 Garantir le financement des associations de pr... http://www.nda-2017.fr/theme/environnement-ene...
751 Mettre fin aux subventions des activités contr... http://www.nda-2017.fr/theme/environnement-ene...
752 Renforcer les campagnes de prévention et de sa... http://www.nda-2017.fr/theme/environnement-ene...
753 Permettre aux vacanciers ne pouvant pas emmene... http://www.nda-2017.fr/theme/environnement-ene...
754 Interdire la cession d'animaux sur les sites d... http://www.nda-2017.fr/theme/environnement-ene...
755 Créer dans l’ensemble des parcs publics région... http://www.nda-2017.fr/theme/environnement-ene...
756 Interdire la consommation de viande de cheval ... http://www.nda-2017.fr/theme/environnement-ene...
757 Encourager la création de fermes pédagogiques. http://www.nda-2017.fr/theme/environnement-ene...
758 Exiger que la délivrance des certificats de va... http://www.nda-2017.fr/theme/environnement-ene...
759 Lutter contre les trafics d’animaux et contrôl... http://www.nda-2017.fr/theme/environnement-ene...
760 Inciter les éleveurs à acheter des animaux fra... http://www.nda-2017.fr/theme/environnement-ene...
761 Stopper le massacre des animaux pour leur four... http://www.nda-2017.fr/theme/environnement-ene...
762 Déposer un projet de loi reconnaissant la sens... http://www.nda-2017.fr/theme/environnement-ene...

763 rows × 2 columns


In [128]:
df.to_csv('../projets/nicolas_dupont_aignan.csv', index=False, quoting=1)

Nathalie Arthaud

François Asselineau